//日志消息类设计
//1.行号  2.时间 3.线程id  4.日志器名称  5.文件名  6.日志消息  7.日志等级

#ifndef M_MSG_H_
#define M_MSG_H_

#include<memory>
#include<thread>
#include<string>
#include"level.hpp"
#include"util.hpp"
using namespace std;

namespace bitlog{
    struct LogMsg{
        using ptr=std::shared_ptr<LogMsg>;
        size_t _line;  //行号
        size_t _ctime;   //时间
        std::thread::id _tid;   //线程id
        string _name;   //日志器名称
        string _file;   //文件名
        string _payload;   //日志消息
        LogLevel::value _level;   //日志等级
        
        LogMsg() {}
        LogMsg(string name,string file,size_t line,string payload,LogLevel::value level)
        :_name(name),_file(file),_payload(payload),_level(level),_line(line),_ctime(util::date::now()),_tid(this_thread::get_id())
        {}
    };

    //使用建造者模式来建造日志器，而不要让用户直接去构造日志器，简化用户的使用复杂度
    //1.抽象一个日志器建造者类（完成日志器对象所需零部件的构建）
    //  1.设置日志器类型
    //  2.将不同类型日志器的创建放到同一个日志器建造者类中完成
    //2.派生出具体的建造者类---局部日志器的建造者 & 全局的日志器建造者（后边添加了全局单例管理器之后，将日志器添加全局管理
}

#endif